from bs4 import BeautifulSoup

import util
import os



def parse_content_English(html, localPath):
    soup = BeautifulSoup(html, 'lxml')

    # 查找外层 div.l_second_right.fr
    outer_div = soup.find('div', class_='l_second_right fr')
    if not outer_div:
        print("未找到 class='l_second_right fr' 的 div")
        return

    # 获取标题
    title_div = outer_div.find('div', class_='list_title')
    title = "无标题"
    if title_div:
        title = title_div.get_text(strip=True) or title

    # 构建保存路径
    filePath = os.path.join(localPath, title)
    os.makedirs(filePath, exist_ok=True)

    # 查找 id="second_right" 的 div
    second_right_div = outer_div.find('div', id='second_right')
    if not second_right_div:
        print("未找到 id='second_right' 的 div")
        return

    # 查找 class="portlet" 的 div
    portlet_div = second_right_div.find('div', class_='portlet')
    if not portlet_div:
        print("未找到 class='portlet' 的 div")
        return

    paragraphs = []  # 存储正文段落
    image_paths = []  # 存储图片路径

    if portlet_div:
        # 遍历content_xilan下的所有子元素（包括div、p等，不仅限p标签）
        for elem in portlet_div.find_all(['div', 'p']):  # 处理div和p标签
            # 过滤空标签（如仅含&nbsp;的标签）
            raw_text = elem.get_text(separator='', strip=True)
            # 处理&nbsp;对应的空格和无效字符
            clean_text = raw_text.replace('\xa0', '').strip()  # \xa0是&nbsp;的Unicode编码

            if clean_text:  # 只保留非空文本
                paragraphs.append(clean_text)

            # 提取图片（在所有元素中查找img标签，不仅限p标签）
            img_tag = elem.find('img')
            if img_tag and img_tag.get('src'):
                img_src = img_tag['src']
                if img_src not in image_paths:  # 去重
                    image_paths.append(img_src)

    # 下载图片并获取本地路径
    img_dir = os.path.join(os.path.dirname(filePath), 'img')
    os.makedirs(img_dir, exist_ok=True)  # 确保图片目录存在
    local_img_paths = []
    for img_url in image_paths:
        local_path = util.download_and_save_image(img_url, img_dir)
        if local_path:
            local_img_paths.append(local_path)

    # 构建HTML内容
    html_content = f"""<html>
        <head>
            <meta charset="UTF-8">
            <title>{title}</title>
            <style>
                /* 增加样式让内容更易读 */
                body {{ font-family: SimSun, "宋体", serif; line-height: 1.8; padding: 20px; }}
                p {{ margin: 10px 0; text-indent: 2em; }}  /* 保留首行缩进 */
                img {{ display: block; margin: 20px auto; max-width: 80%; }}
            </style>
        </head>
        <body>
            <h2>{title}</h2>
            
        """

    # 添加段落文本（保留原有的缩进逻辑）
    for p_text in paragraphs:
        html_content += f"<p>{p_text}</p>\n"

    # 添加图片
    for img_path in local_img_paths:
        # 处理本地路径，确保图片能正确加载
        relative_path = os.path.relpath(img_path, os.path.dirname(filePath))
        html_content += f'<img src="{relative_path}" style="max-width:80%;">\n<br>\n'

    # 结束标签
    html_content += """
        </body>
        </html>
        """

    # 构建文件路径和文件名（处理特殊字符）
    filename = f"{title}.html"
    #  sanitize_filename：处理文件名中的非法字符（如冒号、斜杠等）
    filename = util.sanitize_filename(filename) if hasattr(util, 'sanitize_filename') else filename.replace(':',
                                                                                                            '-').replace(
        '/', '-')
    file_path = os.path.join(filePath, filename)

    # 确保输出目录存在
    os.makedirs(filePath, exist_ok=True)

    # 保存HTML文件
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(html_content)

    print(f"HTML文件已保存至: {file_path}")


def parse_content_dszzc(html, localPath):
    soup = BeautifulSoup(html, 'lxml')

    # 查找外层 div.l_second_right.fr
    outer_div = soup.find('div', class_='l_second_right fr')
    if not outer_div:
        print("未找到 class='l_second_right fr' 的 div")
        return

    # 获取标题
    title_div = outer_div.find('div', class_='list_title')
    title = "无标题"
    if title_div:
        title = title_div.get_text(strip=True) or title

    # 构建保存路径
    filePath = os.path.join(localPath, title)
    os.makedirs(filePath, exist_ok=True)

    # 查找 id="second_right" 的 div
    second_right_div = outer_div.find('div', id='second_right')
    if not second_right_div:
        print("未找到 id='second_right' 的 div")
        return

    # 查找 class="portlet" 的 div
    portlet_div = second_right_div.find('div', class_='portlet')
    if not portlet_div:
        print("未找到 class='portlet' 的 div")
        return

    # 查找 ul li 结构
    ul = portlet_div.find('ul', class_='intro_second')
    if not ul:
        print("未找到 ul 标签")
        return

    # 打印 ul 内容用于调试
    print("ul 内容:")
    print(ul.prettify())

    # 存储解析出的内容和图片
    content_items = []

    # 推荐写法：遍历子节点并筛选 <li>
    for child in ul.children:
        if hasattr(child, 'name') and child.name == 'li':
            print("找到 li 标签:", child.prettify())

            # 查找该 li 下所有的 p 标签
            for p_tag in child.find_all('p'):
                # 判断是否有 img 标签
                img_tag = p_tag.find('img')

                if img_tag and img_tag.get('src'):
                    img_url = img_tag['src']
                    img_path = util.download_and_save_image(img_url, os.path.join(filePath, 'img'))
                    if img_path:
                        content_items.append(('img', img_path))
                else:
                    # 提取完整的文本内容（包含嵌套 span、strong 等标签）
                    text = ''.join(p_tag.stripped_strings)
                    if text:
                        content_items.append(('text', text))

    # 打印信息
    print(f"标题: {title}")
    print("\n正文内容：")
    for item_type, content in content_items:
        if item_type == 'text':
            print(content)
        elif item_type == 'img':
            print(f"图片路径: {content}")

    # 构建HTML内容
    html_content = f"""<html>
<head>
    <meta charset="UTF-8">
    <title>{title}</title>
</head>
<body>
    <h1>{title}</h1>
    <h2>正文内容</h2>
"""

    for item_type, content in content_items:
        if item_type == 'text':
            html_content += f"<p>{content}</p>\n"
        elif item_type == 'img':
            rel_img_path = os.path.relpath(content, filePath)
            html_content += f'<img src="{rel_img_path}" style="max-width:600px;"><br><br>\n'

    html_content += """
</body>
</html>
"""

    # 构建文件路径和文件名
    filename = f"{title}.html"
    filename = util.sanitize_filename(filename)
    file_path = os.path.join(filePath, filename)

    # 保存HTML文件
    try:
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(html_content)
        print(f"HTML文件已保存至: {file_path}")
    except Exception as e:
        print(f"写入HTML文件失败: {e}")

